【新機能】WorkSpacesのログインイベントのトラッキングが可能になりました
大栗です。
WorkSpacesでログインイベントのトラッキングが可能になりました。早速試してみます。
Amazon WorkSpaces now lets you track login events using Amazon CloudWatch Events
WorkSpacesのログインイベント
WorkSpacesでは今までCloudTrailを経由したCloudWatch Eventsでイベント通知が可能でした。しかし、CloudTrailの情報はWorkSpacesのAWS APIの呼び出し情報であるため、WorkSpacesを使用しているエンドユーザの利用状態については取得することができませんでした。
今回ログインイベントがCloudWatch Eventsでサポートされたので、各エンドユーザのログイン状況が分かるようになりました。ただし今回サポートされたイベントはログイン成功のみでパスワード誤りなどのログイン失敗は未サポートです。
イベント内容は以下の形式になります。detail
の中では、アクセス元IPアドレスやWorkSpace IDなども取得できます。ユーザーIDが無い事にご注意ください。
{ "version": "0", "id": "999cccaa-eaaa-0000-1111-123456789012", "detail-type": "WorkSpaces Access", "source": "aws.workspaces", "account": "123456789012", "time": "2018-08-30T00:45:28Z", "region": "us-east-1", "resources": [], "detail": { "clientIpAddress": "0.0.0.0", "actionType": "successfulLogin", "workspacesClientProductName": "WorkSpaces Desktop client", "loginTime": "2018-08-30T00:45:22.377Z", "clientPlatform": "Windows", "directoryId": "domain/d-000000000", "workspaceId": "ws-000000000" } }
やってみる
以下のようにWorkSpacesのログインイベントからLambdaを起動してメールで送信してみます。
WorkSpacesの作成
まずはWorkSpacesを起動します。以下のエントリのようにWorkSpacesを作成します。
SNSトピックの作成
WorkSpacesの起動を待っている間に他のものを準備します。SNSでメール通知を行うトピックを作成します。
SNSダッシュボードでトピックの作成
をクリックします。
トピック名を入力してトピックの作成
をクリックします。
サブスクリプションの作成
をクリックします。
プロトコルをEmail
にして、エンドポイントにメールアドレスを記述して、サブスクリプションの作成
をクリックします。
確認のメールが届くのでConfirm subscriprion
をクリックします。
メールの送信先の確認が取れました。
トピックのサブスクリプションも正常になります。
Lambdaファンクションの作成
次にLambdaを作成します。
以下の環境でLambdaを作成します。
- ランタイム: Python 3.6
- ハンドラ: lambda_function.lambda_handler
ファンクションのコードは以下になります。TopicArn
には作成したSNSトピックのARNを記述します。
import json import boto3 import pprint print('Loading function') sns = boto3.client('sns') def lambda_handler(event, context): print("Received event: " + json.dumps(event, indent=2)) request = { 'TopicArn': 'arn:aws:sns:ap-northeast-1:123456789012:test-mail', 'Message': json.dumps(event, indent=2), 'Subject': 'WorkSpaces Access Notification Mail' } response = sns.publish(**request) pprint.pprint(response) return event['id']
Lambdaを実行するIAM RoleにはSNS:Publish
権限を入れます。
CloudWatch Eventsの設定
CloudWatch Eventsを設定してWorkSpacesのログインイベントからLambdaを起動できるようにします。
CloudWatch Eventsのコンソールでルールの作成
をクリックします。
イベントソースのサービス名にWorkSpaces
、イベント対応にWorkSpaces Access
を設定します。ターゲットでは作成したLambdaファンクションを指定します。
名前と説明を記述してルールの作成
をクリックします。
動作させる
まずWorkSpaces Clientsでアクセスしてみます。
普通にログインできます。
LambdaのログとなるCloudWatch Logsを確認するとログインイベントの内容が表示されます。macOSのHigh SierraからアクセスしているのでしているのでclientPlatformでOSX
で、workspacesClientProductNameがWorkspaces Desktop Client
となっています。
メール通知も来ています。
次にWeb Accessでログインしてみます。
Webブラウザからアクセスできます。
Web Accessの場合もCloudWatch Logsを確認します。今度はclientPlatformがWeb
でworkspacesClientProductNameがWorkspaces Web Client
となっています。
メールでも通知が来ています。
さいごに
今回はログインのメール通知のみを行いましたが、応用するとWorkSpace IDを元にログインユーザが分かるので1日の初回アクセス時刻を業務開始時刻として登録したり、アクセス元IPアドレスを見て不正な場所からのアクセスで無いか場所やレピュテーションを確認する事もできます。
WorkSpacesはリモートワークなどで利用されやすいサービスです。利用者の勤怠管理やセキュリティ向上などに利用できるアップデートですのでうまい使い方を考えていくと良いでしょう。